﻿// 603 数数2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <memory.h>


using  namespace std;
/*
http://oj.daimayuan.top/course/5/problem/247

读入 l,r，请求出 [l,r]中有多少个数字满足数字的各个数位的和是质数。

输入格式
一行两个整数 l,r。

输出格式
一行一个整数表示答案。

样例输入
1 100
样例输出
37
数据范围
对于 100%的数据，保证 1≤l≤r≤1016。
*/

long long l, r, f[18][201];
bool b[201];
int c[21];


long long calc(long long n) {
	if (!n)
		return 0;
	int m = 0;
	for (; n; n /= 10)
		c[++m] = n % 10;
	for (int i = 1, j = m; i < j; i++, j--)
		swap(c[i], c[j]);
	long long res = 0;
	long long  sum = 0;
	for (int i = 1; i <= m; i++) {
		for (int j = 0; j < c[i]; j++) {
			memset(f, 0, sizeof f);
			f[i][sum + j] = 1;
			for (int k = i + 1; k <= m; k++)
				for (int l = 0; l <= (k - 1) * 9; l++)
					if (f[k - 1][l])
						for (int x = 0; x < 10; x++)
							f[k][x + l] += f[k - 1][l];
			for (int j = 2; j <= 9 * m; j++)
				if (!b[j])
					res += f[m][j];
		}
		sum += c[i];
	}

	if (!b[sum])
		++res;

	return res;
}

int main()
{
	memset(b, false, sizeof b);
	b[1] = true;
	for (int i = 2; i <= 200; i++)
		if (!b[i])
			for (int j = i + i; j <= 200; j += i)
				b[j] = true;
	scanf("%lld%lld",&l,&r);
	printf("%lld\n",calc(r) - calc(l-1));


	return 0;
}

 